package com.trace.demo.repository;

import com.trace.demo.entity.DistributionInfo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

@Repository
public interface DistributionInfoRepository extends JpaRepository<DistributionInfo, Long> {

    List<DistributionInfo> findByUserId(Long userId);

    Optional<DistributionInfo> findById(Long id);  // 继承自 JpaRepository，无需显式声明
    /**
     * 根据经销商ID查询分销信息（不分页）
     */
    List<DistributionInfo> findByDealerId(Long dealerId);
    
    /**
     * 根据经销商ID查询分销信息（分页）
     */
    Page<DistributionInfo> findByDealerId(Long dealerId, Pageable pageable);
    
    /**
     * 根据批次ID查询分销信息
     */
    List<DistributionInfo> findByBatchId(String batchId);
    
    /**
     * 根据来源地、目的地或批次ID模糊查询（分页）
     */
    Page<DistributionInfo> findByFromLocationContainingOrToLocationContainingOrBatchIdContaining(
            String fromLocation, String toLocation, String batchId, Pageable pageable);
    
    /**
     * 根据分销日期范围查询（分页）
     */
    Page<DistributionInfo> findByDistributionDateBetween(LocalDate startDate, LocalDate endDate, Pageable pageable);
    
    /**
     * 查询从指定日期开始的分销信息（分页）
     */
    Page<DistributionInfo> findByDistributionDateGreaterThanEqual(LocalDate startDate, Pageable pageable);
    
    /**
     * 查询到指定日期为止的分销信息（分页）
     */
    Page<DistributionInfo> findByDistributionDateLessThanEqual(LocalDate endDate, Pageable pageable);
    
    /**
     * 统计指定日期范围内的分销信息数量
     */
    long countByDistributionDateBetween(LocalDate startDate, LocalDate endDate);
    
    /**
     * 统计从指定日期开始的分销信息数量
     */
    long countByDistributionDateGreaterThanEqual(LocalDate startDate);
    
    /**
     * 统计到指定日期为止的分销信息数量
     */
    long countByDistributionDateLessThanEqual(LocalDate endDate);
} 